<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::net_flow::Peer_socket_send_stats Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Public API.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1net__flow.html">net_flow</a></li><li class="navelem"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">Peer_socket_send_stats</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="classflow_1_1net__flow_1_1Peer__socket__send__stats-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::net_flow::Peer_socket_send_stats Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>A data store that keeps stats about the outgoing direction of a <a class="el" href="classflow_1_1net__flow_1_1Peer__socket.html" title="A peer (non-server) socket operating over the Flow network protocol, with optional stream-of-bytes an...">Peer_socket</a> connection to another Flow-protocol <a class="el" href="classflow_1_1net__flow_1_1Peer__socket.html" title="A peer (non-server) socket operating over the Flow network protocol, with optional stream-of-bytes an...">Peer_socket</a>.  
 <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#details">More...</a></p>

<p><code>#include &lt;info.hpp&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a468d36bda026bd4eb3aa8cec7cd3e82b"><td class="memItemLeft" align="right" valign="top"><a id="a468d36bda026bd4eb3aa8cec7cd3e82b" name="a468d36bda026bd4eb3aa8cec7cd3e82b"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Peer_socket_send_stats</b> ()</td></tr>
<tr class="memdesc:a468d36bda026bd4eb3aa8cec7cd3e82b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs object by initializing stats to their initial values. <br /></td></tr>
<tr class="separator:a468d36bda026bd4eb3aa8cec7cd3e82b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80f22a53b5ba0cb86469e5522ec30305"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a80f22a53b5ba0cb86469e5522ec30305">output</a> (std::ostream *os) const</td></tr>
<tr class="memdesc:a80f22a53b5ba0cb86469e5522ec30305"><td class="mdescLeft">&#160;</td><td class="mdescRight">Outputs the current stats, across multiple lines but not ending with a newline, into the given output stream.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a80f22a53b5ba0cb86469e5522ec30305">More...</a><br /></td></tr>
<tr class="separator:a80f22a53b5ba0cb86469e5522ec30305"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:a13bf4f61554410f5dcc8928d64212e04"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a13bf4f61554410f5dcc8928d64212e04">m_init_time</a></td></tr>
<tr class="memdesc:a13bf4f61554410f5dcc8928d64212e04"><td class="mdescLeft">&#160;</td><td class="mdescRight">The time this object was created; should be about equal to when the socket was created.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a13bf4f61554410f5dcc8928d64212e04">More...</a><br /></td></tr>
<tr class="separator:a13bf4f61554410f5dcc8928d64212e04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a702a7e3fa092414f80190a783f478aeb"><td class="memItemLeft" align="right" valign="top"><a id="a702a7e3fa092414f80190a783f478aeb" name="a702a7e3fa092414f80190a783f478aeb"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_sent_data_size</b></td></tr>
<tr class="memdesc:a702a7e3fa092414f80190a783f478aeb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total bytes sent in DATA packets. <br /></td></tr>
<tr class="separator:a702a7e3fa092414f80190a783f478aeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a72a061170ab84cd19aabb1c40238d65f"><td class="memItemLeft" align="right" valign="top"><a id="a72a061170ab84cd19aabb1c40238d65f" name="a72a061170ab84cd19aabb1c40238d65f"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_sent_data_count</b></td></tr>
<tr class="memdesc:a72a061170ab84cd19aabb1c40238d65f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of packets sent in DATA packets. <br /></td></tr>
<tr class="separator:a72a061170ab84cd19aabb1c40238d65f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e00dce3ed58630d79a8cdaa7b76c8ee"><td class="memItemLeft" align="right" valign="top"><a id="a3e00dce3ed58630d79a8cdaa7b76c8ee" name="a3e00dce3ed58630d79a8cdaa7b76c8ee"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_sent_rexmitted_data_size</b></td></tr>
<tr class="memdesc:a3e00dce3ed58630d79a8cdaa7b76c8ee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a702a7e3fa092414f80190a783f478aeb" title="Total bytes sent in DATA packets.">m_sent_data_size</a>, the data that were retransmitted (as opposed to original) data. <br /></td></tr>
<tr class="separator:a3e00dce3ed58630d79a8cdaa7b76c8ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0bde533fd087669e6dc356e45be975b4"><td class="memItemLeft" align="right" valign="top"><a id="a0bde533fd087669e6dc356e45be975b4" name="a0bde533fd087669e6dc356e45be975b4"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_sent_rexmitted_data_count</b></td></tr>
<tr class="memdesc:a0bde533fd087669e6dc356e45be975b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a72a061170ab84cd19aabb1c40238d65f" title="Number of packets sent in DATA packets.">m_sent_data_count</a>, the data that were retransmitted (as opposed to original) data. <br /></td></tr>
<tr class="separator:a0bde533fd087669e6dc356e45be975b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acca7ee65f331c8d6b1ed9c1c64f941c6"><td class="memItemLeft" align="right" valign="top"><a id="acca7ee65f331c8d6b1ed9c1c64f941c6" name="acca7ee65f331c8d6b1ed9c1c64f941c6"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_received_low_lvl_ack_count</b></td></tr>
<tr class="memdesc:acca7ee65f331c8d6b1ed9c1c64f941c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of low-level ACK packets received. <br /></td></tr>
<tr class="separator:acca7ee65f331c8d6b1ed9c1c64f941c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab16d86a43937ff1a082c8eb9710ae24b"><td class="memItemLeft" align="right" valign="top"><a id="ab16d86a43937ff1a082c8eb9710ae24b" name="ab16d86a43937ff1a082c8eb9710ae24b"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_received_low_lvl_rcv_wnd_only_ack_count</b></td></tr>
<tr class="memdesc:ab16d86a43937ff1a082c8eb9710ae24b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#acca7ee65f331c8d6b1ed9c1c64f941c6" title="Number of low-level ACK packets received.">m_received_low_lvl_ack_count</a>, the packets that contained no individual acknowledgments but sent only to advertise rcv_wnd. <br /></td></tr>
<tr class="separator:ab16d86a43937ff1a082c8eb9710ae24b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49fd72447e2eda5168855963f6f55fdf"><td class="memItemLeft" align="right" valign="top"><a id="a49fd72447e2eda5168855963f6f55fdf" name="a49fd72447e2eda5168855963f6f55fdf"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_received_ack_count</b></td></tr>
<tr class="memdesc:a49fd72447e2eda5168855963f6f55fdf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all valid). <br /></td></tr>
<tr class="separator:a49fd72447e2eda5168855963f6f55fdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c23d15ff0f3350cca96e38322f3cbf0"><td class="memItemLeft" align="right" valign="top"><a id="a7c23d15ff0f3350cca96e38322f3cbf0" name="a7c23d15ff0f3350cca96e38322f3cbf0"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>m_rcv_wnd_exhausted</b></td></tr>
<tr class="memdesc:a7c23d15ff0f3350cca96e38322f3cbf0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the last rcv_wnd update from other side indicated window size &lt; max-block-size bytes. <code>false</code> initially. <br /></td></tr>
<tr class="separator:a7c23d15ff0f3350cca96e38322f3cbf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3976b80514468082ca36eb00857a5bb"><td class="memItemLeft" align="right" valign="top"><a id="af3976b80514468082ca36eb00857a5bb" name="af3976b80514468082ca36eb00857a5bb"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_remote_rcv_wnd_exhaustion_events</b></td></tr>
<tr class="memdesc:af3976b80514468082ca36eb00857a5bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of times <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a7c23d15ff0f3350cca96e38322f3cbf0" title="Whether the last rcv_wnd update from other side indicated window size &lt; max-block-size bytes....">m_rcv_wnd_exhausted</a> changed from <code>false</code>. <br /></td></tr>
<tr class="separator:af3976b80514468082ca36eb00857a5bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a146759e1b8603f000b85e90ce02f7327"><td class="memItemLeft" align="right" valign="top"><a id="a146759e1b8603f000b85e90ce02f7327" name="a146759e1b8603f000b85e90ce02f7327"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_remote_rcv_wnd_recovery_events</b></td></tr>
<tr class="memdesc:a146759e1b8603f000b85e90ce02f7327"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of times <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a7c23d15ff0f3350cca96e38322f3cbf0" title="Whether the last rcv_wnd update from other side indicated window size &lt; max-block-size bytes....">m_rcv_wnd_exhausted</a> changed from <code>true</code> (not counting it being initially set to <code>false</code>). <br /></td></tr>
<tr class="separator:a146759e1b8603f000b85e90ce02f7327"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac64296f2cd3f8a916e88022369dde97a"><td class="memItemLeft" align="right" valign="top"><a id="ac64296f2cd3f8a916e88022369dde97a" name="ac64296f2cd3f8a916e88022369dde97a"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_good_ack_data_size</b></td></tr>
<tr class="memdesc:ac64296f2cd3f8a916e88022369dde97a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of the individual acknowledgments covered by <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf" title="Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...">m_received_ack_count</a>, the total bytes in the DATA packets that were properly acknowledged and converted from In-flight to Acknowledged status. <br /></td></tr>
<tr class="separator:ac64296f2cd3f8a916e88022369dde97a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a1d14037ba5607b7aac6e5f0736ea97"><td class="memItemLeft" align="right" valign="top"><a id="a7a1d14037ba5607b7aac6e5f0736ea97" name="a7a1d14037ba5607b7aac6e5f0736ea97"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_good_ack_count</b></td></tr>
<tr class="memdesc:a7a1d14037ba5607b7aac6e5f0736ea97"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf" title="Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...">m_received_ack_count</a>, those packets that were properly acknowledged and converted from In-flight to Acknowledged status. <br /></td></tr>
<tr class="separator:a7a1d14037ba5607b7aac6e5f0736ea97"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5969e758bc5632d7ed0def916faacd57"><td class="memItemLeft" align="right" valign="top"><a id="a5969e758bc5632d7ed0def916faacd57" name="a5969e758bc5632d7ed0def916faacd57"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_late_or_dupe_ack_count</b></td></tr>
<tr class="memdesc:a5969e758bc5632d7ed0def916faacd57"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf" title="Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...">m_received_ack_count</a>, those packets that had either already been convered from In-flight to Acknowledged or (more likely) already been converted from In-flight to Dropped. <br /></td></tr>
<tr class="separator:a5969e758bc5632d7ed0def916faacd57"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa12a250e3368070b8ceff316e7d6f2b6"><td class="memItemLeft" align="right" valign="top"><a id="aa12a250e3368070b8ceff316e7d6f2b6" name="aa12a250e3368070b8ceff316e7d6f2b6"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_error_acks_data_count</b></td></tr>
<tr class="memdesc:aa12a250e3368070b8ceff316e7d6f2b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf" title="Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...">m_received_ack_count</a>, those acknowledgments that contained some error about the sequence numbers so that they were not acceptable, and the connection did/will close as a result. <br /></td></tr>
<tr class="separator:aa12a250e3368070b8ceff316e7d6f2b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93be5eea9037929e0b08890278f5a522"><td class="memItemLeft" align="right" valign="top"><a id="a93be5eea9037929e0b08890278f5a522" name="a93be5eea9037929e0b08890278f5a522"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_dropped_data_size</b></td></tr>
<tr class="memdesc:a93be5eea9037929e0b08890278f5a522"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total bytes in sent DATA packets that are considered permanently dropped (i.e., whose status has changed from In-flight to Dropped). <br /></td></tr>
<tr class="separator:a93be5eea9037929e0b08890278f5a522"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab079152574c6455110bdce7d9f157d80"><td class="memItemLeft" align="right" valign="top"><a id="ab079152574c6455110bdce7d9f157d80" name="ab079152574c6455110bdce7d9f157d80"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_dropped_data_count</b></td></tr>
<tr class="memdesc:ab079152574c6455110bdce7d9f157d80"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of sent DATA packets that are considered permanently dropped (i.e., whose status has changed from In-flight to Dropped). <br /></td></tr>
<tr class="separator:ab079152574c6455110bdce7d9f157d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ef23ec6d995a8cb71dc9cc5d2c24c1d"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6ef23ec6d995a8cb71dc9cc5d2c24c1d">m_loss_events</a></td></tr>
<tr class="memdesc:a6ef23ec6d995a8cb71dc9cc5d2c24c1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of loss events so far (not counting Drop Timeouts) that have been reported to congestion control module.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6ef23ec6d995a8cb71dc9cc5d2c24c1d">More...</a><br /></td></tr>
<tr class="separator:a6ef23ec6d995a8cb71dc9cc5d2c24c1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6851332a773bdc55154fe7e4233db4fd"><td class="memItemLeft" align="right" valign="top"><a id="a6851332a773bdc55154fe7e4233db4fd" name="a6851332a773bdc55154fe7e4233db4fd"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_idle_timeouts</b></td></tr>
<tr class="memdesc:a6851332a773bdc55154fe7e4233db4fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of idle timeouts (in the send direction) so far that have been detected and indicated to congestion control module. <br /></td></tr>
<tr class="separator:a6851332a773bdc55154fe7e4233db4fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f3054faf100116ec0db9cee0d6bdbe8"><td class="memItemLeft" align="right" valign="top"><a id="a5f3054faf100116ec0db9cee0d6bdbe8" name="a5f3054faf100116ec0db9cee0d6bdbe8"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_drop_timeouts</b></td></tr>
<tr class="memdesc:a5f3054faf100116ec0db9cee0d6bdbe8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of times Drop Timer has fired so far. <br /></td></tr>
<tr class="separator:a5f3054faf100116ec0db9cee0d6bdbe8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54ab43fb396a87593fd194a3f7837699"><td class="memItemLeft" align="right" valign="top"><a id="a54ab43fb396a87593fd194a3f7837699" name="a54ab43fb396a87593fd194a3f7837699"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><b>m_max_buf_data_size</b></td></tr>
<tr class="memdesc:a54ab43fb396a87593fd194a3f7837699"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum number of bytes in the Send buffer so far. <br /></td></tr>
<tr class="separator:a54ab43fb396a87593fd194a3f7837699"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaca7b45515144a6bb5e1b3c978251591"><td class="memItemLeft" align="right" valign="top"><a id="aaca7b45515144a6bb5e1b3c978251591" name="aaca7b45515144a6bb5e1b3c978251591"></a>
std::map&lt; std::type_index, uint64_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>m_low_lvl_packet_xfer_requested_count_by_type</b></td></tr>
<tr class="memdesc:aaca7b45515144a6bb5e1b3c978251591"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total count of low-level packets that were given to the sending module to be sent, subject to pacing if applicable, split up by packet type similarly to <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html#afced8fb805507e2ac53bcb6b55441c0d" title="Total size in serialized form of low-level packets received targeted at this socket,...">Peer_socket_receive_stats::m_low_lvl_packet_size_by_type</a>. <br /></td></tr>
<tr class="separator:aaca7b45515144a6bb5e1b3c978251591"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6161ae89e02d9f9f768b50aaba0b5f3d"><td class="memItemLeft" align="right" valign="top"><a id="a6161ae89e02d9f9f768b50aaba0b5f3d" name="a6161ae89e02d9f9f768b50aaba0b5f3d"></a>
std::map&lt; std::type_index, boost::array&lt; uint64_t, 2 &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>m_low_lvl_packet_xfer_called_size_by_type</b></td></tr>
<tr class="memdesc:a6161ae89e02d9f9f768b50aaba0b5f3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total size in serialized form of low-level packets that were given to OS in a send call, from this socket, split up by packet type similarly to <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html#afced8fb805507e2ac53bcb6b55441c0d" title="Total size in serialized form of low-level packets received targeted at this socket,...">Peer_socket_receive_stats::m_low_lvl_packet_size_by_type</a>. <br /></td></tr>
<tr class="separator:a6161ae89e02d9f9f768b50aaba0b5f3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad05c38422adb3ef6c98e6ec37c539a09"><td class="memItemLeft" align="right" valign="top"><a id="ad05c38422adb3ef6c98e6ec37c539a09" name="ad05c38422adb3ef6c98e6ec37c539a09"></a>
std::map&lt; std::type_index, boost::array&lt; uint64_t, 2 &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>m_low_lvl_packet_xfer_called_count_by_type</b></td></tr>
<tr class="memdesc:ad05c38422adb3ef6c98e6ec37c539a09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count of low-level packets that were given to OS in a send call, from this socket, split up by packet type similarly to <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html#afced8fb805507e2ac53bcb6b55441c0d" title="Total size in serialized form of low-level packets received targeted at this socket,...">Peer_socket_receive_stats::m_low_lvl_packet_size_by_type</a>. <br /></td></tr>
<tr class="separator:ad05c38422adb3ef6c98e6ec37c539a09"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0898d89892cfeb1e20cef22e45060e2"><td class="memItemLeft" align="right" valign="top"><a id="ae0898d89892cfeb1e20cef22e45060e2" name="ae0898d89892cfeb1e20cef22e45060e2"></a>
std::map&lt; std::type_index, std::map&lt; <a class="el" href="namespaceflow_1_1net__flow.html#aaeebb1db2f4bb19f78cada66784d91d5">Xfer_op_result</a>, uint64_t &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>m_low_lvl_packet_xfer_completed_size_by_type_and_result</b></td></tr>
<tr class="memdesc:ae0898d89892cfeb1e20cef22e45060e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6161ae89e02d9f9f768b50aaba0b5f3d" title="Total size in serialized form of low-level packets that were given to OS in a send call,...">m_low_lvl_packet_xfer_called_size_by_type</a>, the data for which the send completion handler executed, split up further by the transfer result reported to the handler. <br /></td></tr>
<tr class="separator:ae0898d89892cfeb1e20cef22e45060e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79009d09a57f3baf9fa6905b5635d0f9"><td class="memItemLeft" align="right" valign="top"><a id="a79009d09a57f3baf9fa6905b5635d0f9" name="a79009d09a57f3baf9fa6905b5635d0f9"></a>
std::map&lt; std::type_index, std::map&lt; <a class="el" href="namespaceflow_1_1net__flow.html#aaeebb1db2f4bb19f78cada66784d91d5">Xfer_op_result</a>, uint64_t &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>m_low_lvl_packet_xfer_completed_count_by_type_and_result</b></td></tr>
<tr class="memdesc:a79009d09a57f3baf9fa6905b5635d0f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ad05c38422adb3ef6c98e6ec37c539a09" title="Count of low-level packets that were given to OS in a send call, from this socket,...">m_low_lvl_packet_xfer_called_count_by_type</a>, the data for which the send completion handler executed, split up further by the transfer result reported to the handler. <br /></td></tr>
<tr class="separator:a79009d09a57f3baf9fa6905b5635d0f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:a98357cf7d8e29ec9dd34bd11ab382108"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a98357cf7d8e29ec9dd34bd11ab382108">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">Peer_socket_send_stats</a> &amp;stats)</td></tr>
<tr class="memdesc:a98357cf7d8e29ec9dd34bd11ab382108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the stats in the given stats object to the standard <code>ostream</code> and returns the latter.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a98357cf7d8e29ec9dd34bd11ab382108">More...</a><br /></td></tr>
<tr class="separator:a98357cf7d8e29ec9dd34bd11ab382108"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >A data store that keeps stats about the outgoing direction of a <a class="el" href="classflow_1_1net__flow_1_1Peer__socket.html" title="A peer (non-server) socket operating over the Flow network protocol, with optional stream-of-bytes an...">Peer_socket</a> connection to another Flow-protocol <a class="el" href="classflow_1_1net__flow_1_1Peer__socket.html" title="A peer (non-server) socket operating over the Flow network protocol, with optional stream-of-bytes an...">Peer_socket</a>. </p>
<p >Note that this also includes stats about <em>incoming</em> traffic that facilitates further outgoing traffic (namely, data on incoming acknowledgments are in this class).</p>
<p >All other comments in <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html" title="A data store that keeps stats about the incoming direction of a Peer_socket connection to another Flo...">Peer_socket_receive_stats</a> doc header apply equally to this class.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html" title="A data store that keeps stats about the incoming direction of a Peer_socket connection to another Flo...">Peer_socket_receive_stats</a> </dd></dl>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a80f22a53b5ba0cb86469e5522ec30305" name="a80f22a53b5ba0cb86469e5522ec30305"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a80f22a53b5ba0cb86469e5522ec30305">&#9670;&nbsp;</a></span>output()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats::output </td>
          <td>(</td>
          <td class="paramtype">std::ostream *&#160;</td>
          <td class="paramname"><em>os</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Outputs the current stats, across multiple lines but not ending with a newline, into the given output stream. </p>
<p ><code>operator&lt;&lt;()</code> uses this and is more likely to be used directly by the class user.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to serialize. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="a98357cf7d8e29ec9dd34bd11ab382108" name="a98357cf7d8e29ec9dd34bd11ab382108"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a98357cf7d8e29ec9dd34bd11ab382108">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">Peer_socket_send_stats</a> &amp;&#160;</td>
          <td class="paramname"><em>stats</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints string representation of the stats in the given stats object to the standard <code>ostream</code> and returns the latter. </p>
<p >The representation is multi-line but ends in no newline.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to print. </td></tr>
    <tr><td class="paramname">stats</td><td>Value to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a13bf4f61554410f5dcc8928d64212e04" name="a13bf4f61554410f5dcc8928d64212e04"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a13bf4f61554410f5dcc8928d64212e04">&#9670;&nbsp;</a></span>m_init_time</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> flow::net_flow::Peer_socket_send_stats::m_init_time</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The time this object was created; should be about equal to when the socket was created. </p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000030">Todo:</a></b></dt><dd><a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html" title="A data store that keeps stats about the incoming direction of a Peer_socket connection to another Flo...">Peer_socket_receive_stats</a> also independently stores a similar value, so to save memory put <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a13bf4f61554410f5dcc8928d64212e04" title="The time this object was created; should be about equal to when the socket was created.">m_init_time</a> elsewhere. </dd></dl>

</div>
</div>
<a id="a6ef23ec6d995a8cb71dc9cc5d2c24c1d" name="a6ef23ec6d995a8cb71dc9cc5d2c24c1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ef23ec6d995a8cb71dc9cc5d2c24c1d">&#9670;&nbsp;</a></span>m_loss_events</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint64_t flow::net_flow::Peer_socket_send_stats::m_loss_events</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Number of loss events so far (not counting Drop Timeouts) that have been reported to congestion control module. </p>
<p >(Note that multiple individual acknowledgments, and even multiple ACKs, can belong to one loss event and would only be counted once in thise case.) </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>net_flow/<a class="el" href="info_8hpp.html">info.hpp</a></li>
<li>net_flow/<a class="el" href="info_8cpp.html">info.cpp</a></li>
<li>net_flow/<a class="el" href="net__flow__fwd_8hpp.html">net_flow_fwd.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:32 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
